Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
Transformar una lista de puntos en un "rango" de índices

Digamos que tengo una lista de puntos de un torneo

 points = [0, 12, 9]

Y quiero tener una clasificación de los jugadores, por lo que los resultados esperados serían

 [1, 2, 0]

Porque el índice 1 está primero en el ranking, seguido por el índice 2 y luego el índice 0. Mi idea era usar un for para iterar a través de todos los números, obtener el valor más grande, encontrar el índice del valor más grande y luego asignar el valor. en el ranking, pero me parece innecesariamente largo y complicado. ¿Algun consejo?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Uso sorted :

 points = [0, 12, 9] res = sorted(range(len(points)), key=lambda x: points[x], reverse=True) print(res)

Producción

 [1, 2, 0]

La idea es ordenar los índices de la lista ( range(3) ) según su valor en la lista, por lo tanto, key=lambda x: points[x] . El verdadero inverso es porque desea una clasificación descendente.

over 4 years ago · Santiago Trujillo Relatório

0

points = [0, 12, 9] points_and_indices = [(p, i) for i, p in enumerate(points)] points_and_indices.sort(reverse=True) indices = [i for p, i in points_and_indices] print(indices)

producción:

 [1, 2, 0]

ACTUALIZAR

dices en un comentario

El primer índice que obtuvo esa cantidad de puntos está adelante

Desafortunadamente, esto hace que la solución anterior sea incorrecta para sus propósitos, porque los índices se incluyen en orden inverso.

Para explotar la estabilidad de las ordenaciones de Python, debemos no incluir los índices en la ordenación inversa o usar una función decreciente de los puntos en lugar de los puntos mismos.

Podemos clasificar según los puntos negativos y también condensarlo todo en una sola línea, como esta:

 points = [0, 12, 9, 12] indices = [i for _, i in sorted((-p, i) for i, p in enumerate(points))] print(indices)

producción:

 [1, 3, 2, 0]

De todos modos, la solución de Dani Mesejo es más pitónica, aunque el uso de una clave de clasificación puede causar algunos problemas a las personas que vienen de otros lenguajes de programación.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda